{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# %load ch5.py\n",
    "from numpy import *\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def lDataSet():\n",
    "    dataMat = [];labelMat = []\n",
    "    url = r'C:\\Users\\bgape\\Desktop\\computerS\\machinelearninginaction\\Ch05\\testSet.txt'\n",
    "    fr = open(url)\n",
    "    for line in fr.readlines():\n",
    "        lineArr = line.strip().split()\n",
    "        dataMat.append([1,float(lineArr[0]),float(lineArr[1])])\n",
    "        labelMat.append(float(lineArr[2]))\n",
    "    return dataMat,labelMat\n",
    "\n",
    "def dotplot():\n",
    "    dataMat, labelMat = lDataSet()\n",
    "    x1 = [];y1 = []\n",
    "    x2 = [];y2 = []\n",
    "    for i in range(len(labelMat)):\n",
    "        if labelMat[i] == 0:\n",
    "            x1.append(dataMat[i][1])\n",
    "            y1.append(dataMat[i][2])\n",
    "        else:\n",
    "            x2.append(dataMat[i][1])\n",
    "            y2.append(dataMat[i][2])\n",
    "    plt.scatter(x1,y1,5)\n",
    "    plt.scatter(x2,y2,5)\n",
    "    plt.legend(['class0','class1'],loc=2)\n",
    "    plt.show()\n",
    "\n",
    "def sigmoid(inx):\n",
    "    return 1/(1+exp(-inx))\n",
    "\n",
    "def gradAscent(dataMatIn,classLabels,maxCycle):\n",
    "    dataMatrix = mat(dataMatIn)\n",
    "    labelsMat = mat(classLabels).transpose()\n",
    "    n = shape(dataMatrix)[1]\n",
    "    alpha = 0.001\n",
    "    sample = zeros((maxCycle,n))\n",
    "    weights = ones((n,1))\n",
    "    for k in range(maxCycle):\n",
    "        h = sigmoid(dataMatrix*weights)\n",
    "        error = labelsMat-h\n",
    "        weights = weights+alpha*dataMatrix.transpose()*error\n",
    "        sample[k,:] = array(weights).T[0]\n",
    "    return array(weights).T[0],sample.T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [],
   "source": [
    "def stocGradAscent(dataArr,labelMat):\n",
    "    dataArr = array(dataArr)\n",
    "    m,n = shape(dataArr)\n",
    "    alpha = 0.01\n",
    "    weights = ones(n)\n",
    "    for i in range(m):\n",
    "        h = sigmoid(sum(dataArr[i]*weights))\n",
    "        error = labelMat[i]-h\n",
    "        weights = weights+alpha*error*dataArr[i]\n",
    "    return weights"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## def iterationPlot():\n",
    "    y = stocGradAscent(dataArr,labelMat)[1]\n",
    "    x = array(range(shape(dataArr)[0]))\n",
    "    plt.plot(x,y[0,:],color='r')\n",
    "    plt.plot(x,y[1,:],color='g')\n",
    "    plt.plot(x,y[2,:],color='b')\n",
    "    plt.show()\n",
    "iterationPlot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[[1, -0.017612, 14.053064],\n",
       " [1, -1.395634, 4.662541],\n",
       " [1, -0.752157, 6.53862],\n",
       " [1, -1.322371, 7.152853],\n",
       " [1, 0.423363, 11.054677],\n",
       " [1, 0.406704, 7.067335],\n",
       " [1, 0.667394, 12.741452],\n",
       " [1, -2.46015, 6.866805],\n",
       " [1, 0.569411, 9.548755],\n",
       " [1, -0.026632, 10.427743],\n",
       " [1, 0.850433, 6.920334],\n",
       " [1, 1.347183, 13.1755],\n",
       " [1, 1.176813, 3.16702],\n",
       " [1, -1.781871, 9.097953],\n",
       " [1, -0.566606, 5.749003],\n",
       " [1, 0.931635, 1.589505],\n",
       " [1, -0.024205, 6.151823],\n",
       " [1, -0.036453, 2.690988],\n",
       " [1, -0.196949, 0.444165],\n",
       " [1, 1.014459, 5.754399],\n",
       " [1, 1.985298, 3.230619],\n",
       " [1, -1.693453, -0.55754],\n",
       " [1, -0.576525, 11.778922],\n",
       " [1, -0.346811, -1.67873],\n",
       " [1, -2.124484, 2.672471],\n",
       " [1, 1.217916, 9.597015],\n",
       " [1, -0.733928, 9.098687],\n",
       " [1, -3.642001, -1.618087],\n",
       " [1, 0.315985, 3.523953],\n",
       " [1, 1.416614, 9.619232],\n",
       " [1, -0.386323, 3.989286],\n",
       " [1, 0.556921, 8.294984],\n",
       " [1, 1.224863, 11.58736],\n",
       " [1, -1.347803, -2.406051],\n",
       " [1, 1.196604, 4.951851],\n",
       " [1, 0.275221, 9.543647],\n",
       " [1, 0.470575, 9.332488],\n",
       " [1, -1.889567, 9.542662],\n",
       " [1, -1.527893, 12.150579],\n",
       " [1, -1.185247, 11.309318],\n",
       " [1, -0.445678, 3.297303],\n",
       " [1, 1.042222, 6.105155],\n",
       " [1, -0.618787, 10.320986],\n",
       " [1, 1.152083, 0.548467],\n",
       " [1, 0.828534, 2.676045],\n",
       " [1, -1.237728, 10.549033],\n",
       " [1, -0.683565, -2.166125],\n",
       " [1, 0.229456, 5.921938],\n",
       " [1, -0.959885, 11.555336],\n",
       " [1, 0.492911, 10.993324],\n",
       " [1, 0.184992, 8.721488],\n",
       " [1, -0.355715, 10.325976],\n",
       " [1, -0.397822, 8.058397],\n",
       " [1, 0.824839, 13.730343],\n",
       " [1, 1.507278, 5.027866],\n",
       " [1, 0.099671, 6.835839],\n",
       " [1, -0.344008, 10.717485],\n",
       " [1, 1.785928, 7.718645],\n",
       " [1, -0.918801, 11.560217],\n",
       " [1, -0.364009, 4.7473],\n",
       " [1, -0.841722, 4.119083],\n",
       " [1, 0.490426, 1.960539],\n",
       " [1, -0.007194, 9.075792],\n",
       " [1, 0.356107, 12.447863],\n",
       " [1, 0.342578, 12.281162],\n",
       " [1, -0.810823, -1.466018],\n",
       " [1, 2.530777, 6.476801],\n",
       " [1, 1.296683, 11.607559],\n",
       " [1, 0.475487, 12.040035],\n",
       " [1, -0.783277, 11.009725],\n",
       " [1, 0.074798, 11.02365],\n",
       " [1, -1.337472, 0.468339],\n",
       " [1, -0.102781, 13.763651],\n",
       " [1, -0.147324, 2.874846],\n",
       " [1, 0.518389, 9.887035],\n",
       " [1, 1.015399, 7.571882],\n",
       " [1, -1.658086, -0.027255],\n",
       " [1, 1.319944, 2.171228],\n",
       " [1, 2.056216, 5.019981],\n",
       " [1, -0.851633, 4.375691],\n",
       " [1, -1.510047, 6.061992],\n",
       " [1, -1.076637, -3.181888],\n",
       " [1, 1.821096, 10.28399],\n",
       " [1, 3.01015, 8.401766],\n",
       " [1, -1.099458, 1.688274],\n",
       " [1, -0.834872, -1.733869],\n",
       " [1, -0.846637, 3.849075],\n",
       " [1, 1.400102, 12.628781],\n",
       " [1, 1.752842, 5.468166],\n",
       " [1, 0.078557, 0.059736],\n",
       " [1, 0.089392, -0.7153],\n",
       " [1, 1.825662, 12.693808],\n",
       " [1, 0.197445, 9.744638],\n",
       " [1, 0.126117, 0.922311],\n",
       " [1, -0.679797, 1.22053],\n",
       " [1, 0.677983, 2.556666],\n",
       " [1, 0.761349, 10.693862],\n",
       " [1, -2.168791, 0.143632],\n",
       " [1, 1.38861, 9.341997],\n",
       " [1, 0.317029, 14.739025]]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataArr,labelMat = lDataSet()\n",
    "dataArr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 250,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plotBestFit(weights,maxCycle=0,fun=gradAscent):\n",
    "    dataMat, labelMat = lDataSet()\n",
    "    x1 = [];y1 = []\n",
    "    x2 = [];y2 = []\n",
    "    for i in range(len(labelMat)):\n",
    "        if labelMat[i] == 0:\n",
    "            x1.append(dataMat[i][1])\n",
    "            y1.append(dataMat[i][2])\n",
    "        else:\n",
    "            x2.append(dataMat[i][1])\n",
    "            y2.append(dataMat[i][2])\n",
    "    fig = plt.figure()\n",
    "    ax = fig.add_subplot(111)\n",
    "    if maxCycle != 0:\n",
    "        ax = fig.add_subplot(121)\n",
    "    ax.scatter(x1,y1,s=10,c='r',marker='s')\n",
    "    ax.scatter(x2,y2,s=10,c='g')\n",
    "    ax.legend(['class0','class1'],loc=2)\n",
    "    x = arange(-3,3,0.1)\n",
    "    y = (-weights[0]-weights[1]*x)/weights[2]\n",
    "    ax.plot(x,y)\n",
    "    plt.xlabel('X1');plt.ylabel('X2');\n",
    "    if maxCycle != 0:\n",
    "        ax = fig.add_subplot(122)\n",
    "        y = fun(dataArr,labelMat,maxCycle)[1]\n",
    "        x = array(range(maxCycle))\n",
    "        ax.plot(x,y[0,:],color='r')\n",
    "        ax.plot(x,y[1,:],color='g')\n",
    "        ax.plot(x,y[2,:],color='b')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 242,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "weights = gradAscent(dataArr,labelMat,280)[0]\n",
    "plotBestFit(weights,280)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEGCAYAAAB7DNKzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deXxU9dX48c8hCYRA2MMa9iWgQCIG3FFEAtIW16pYF7SPVAtP3ZdHf6/W2uUBxK2CIrhbi0vRmsdCCIsI1o2lgCJJCGsCyCoQCNnP748MNuJkyDIz997Meb9eeSV3yczJzOSee7/n+/1eUVWMMcaY6jRyOgBjjDHuZonCGGNMQJYojDHGBGSJwhhjTECWKIwxxgQU7XQAodCuXTvt0aOH02EYY4xnrF69er+qJvjb1iATRY8ePVi1apXTYRhjjGeIyPbqtlnTkzHGmIAsURhjjAko5IlCRF4Wkb0i8nWVdY+KyE4RWev7GlvN744RkWwRyRWRh0IdqzHGmB8LR43iVWAG8PpJ659S1enV/ZKIRAEzgVFAPrBSRNJV9Zu6BFFaWkp+fj5FRUV1+fUGIzY2lsTERGJiYpwOxRjjESFPFKq6XER61OFXhwG5qroFQETeAi4D6pQo8vPziY+Pp0ePHohIXR7C81SVAwcOkJ+fT8+ePZ0OxxjjEU7WKCaLyHpf01RrP9u7AHlVlvN96+qkqKiItm3bRmySABAR2rZtG/FXVcaY2nEqUTwP9AZSgN3AE3728XdEr3aqWxGZKCKrRGTVvn37qtunDqE2LPYaRJAWLUDkP18tWjgdkfEoRxKFqu5R1XJVrQDmUNnMdLJ8oGuV5URgV4DHnK2qqaqampDgd8yIMZGloCDwsjE15EiiEJFOVRavAL72s9tKoK+I9BSRxsB1QHo44guXRx99lOnTq63n11pGRgZJSUn06dOHKVOmBO1xjTGRLRzdY+cCnwFJIpIvIr8EponIVyKyHhgB3O3bt7OIzAdQ1TJgMrAQ2Ai8o6obQh2vV5WXlzNp0iQWLFjAN998w9y5c/nmmzrV/Y0x5gfC0etpvJ/VL1Wz7y5gbJXl+cD8EIUWdq+//jrTp09HRBg8eDC9e/f+ftucOXOYPXs2JSUl9OnThzfeeIO4uDjeffddfv/73xMVFUXLli1Zvnw5GzZs4JZbbqGkpISKigrmzZvH/v376dOnD7169QLguuuu44MPPuC0005z6s81TouP/2FzU3y8c7EYT7OR2dUJciFww4YN/OlPf2Lp0qWsW7eOZ5555gfbr7zySlauXMm6desYMGAAL71UmUsfe+wxFi5cyLp160hPr2x5mzVrFnfeeSdr165l1apVJCYmsnPnTrp2/U9J58Q6E8GOHAHV/3wdOeJ0RMajLFFUJ8iFwKVLl3L11VfTrl07ANq0afOD7V9//TUXXHABgwYN4s0332TDhspWtvPOO48JEyYwZ84cysvLATjnnHP485//zNSpU9m+fTtNmzbF373PrYeTMSYYLFGEiaoGPHBPmDCBGTNm8NVXX/G73/3u+7EOs2bN4o9//CN5eXmkpKRw4MABrr/+etLT02natCmjR49m6dKlJCYmkpf3n2En+fn5dO7cOeR/lwkx6+JqXMASRZiMHDmSd955hwMHDgBw8ODBH2wvKCigU6dOlJaW8uabb36/fvPmzZx11lk89thjtGvXjry8PLZs2UKvXr34zW9+w7hx41i/fj1Dhw5l06ZNbN26lZKSEt566y3GjRsX1r/RhIB1cTUu0CDvRxEUQS4Enn766TzyyCNceOGFREVFccYZZ1D15kp/+MMfOOuss+jevTuDBg2iwPfc999/P5s2bUJVGTlyJMnJyUyZMoW//vWvxMTE0LFjR377298SHR3NjBkzGD16NOXl5dx6662cfvrp9YrZGGMAxF/bttelpqbqyTcu2rhxIwMGDHAoInex18LFWrQ49VVDA/yfNc4TkdWqmupvmzU9GeMmp0oSbuniarWTiGJNT8a4nRuvIKx2ElHsisIYY0xAliiMcZOTm5bc0tRkIpo1PRnjJl4ZPW3Tg0QUSxTGmNrzSkIzQWFNTw4K9jTjt956K+3bt2fgwIFBe0xjHGG9qlzFEkUDMmHCBDIyMpwOw5j6s15VrmKJIoxef/11Bg8eTHJyMjfeeOMPts2ZM4ehQ4eSnJzMVVddRWFhIQDvvvsuAwcOJDk5meHDhwOVM9EOGzaMlJQUBg8ezKZNmwAYPnz4jyYbNMaY+rJEEUB6djqT508mPbv+N9YL9TTjxhgTKpYoqpGenc74eeOZuXIm4+eNr3eyCPU048YEnZN1Ausm7CrhuBXqyyKyV0S+rrLucRHJEpH1IvK+iLSq5ne3+W6ZulZEVvnbJ1QyN2dSWFrZ/FNYWkjm5sx6PV6opxk3JuicrBOcuOnSiQRRUFD/ZGUF8joLxxXFq8CYk9YtAgaq6mAgB/ifAL8/QlVTqpusKlTSeqcRFxMHQFxMHGm90+r1eKGeZtyYBimYycoK5HUW8kShqsuBgyety1TVMt/i54DrGtnHJY1j7lVzmTR0EnOvmsu4pPrd26HqNOPJycncc889P9h+YprxUaNG0b9//+/X33///QwaNIiBAwcyfPhwkpOTefvttxk4cCApKSlkZWVx0003ATB+/HjOOeccsrOzSUxM/L7OYSKcnUmbegrLNOMi0gP4UFV/1MFfRP4PeFtV/+pn21bgO0CBF1R1dk2ez6YZD8xeiwjjr8mzJv/3J095Hh8f/oF2dY091I/VAAWaZtzRkdki8ghQBrxZzS7nqeouEWkPLBKRLN8Vir/HmghMBOjWrVtI4jXGc+pz9eCG0dfBnCrEph2pM8d6PYnIzcBPgV9oNZc1qrrL930v8D4wrLrHU9XZqpqqqqkJCQmhCNmEmjWRBJ/X2+FPFLVPfNUneQXzsSKMI4lCRMYADwLjVLWwmn2aiUj8iZ+BNOBrf/vWVEO8m19tufo1sGJjeMTHW1I2tRKO7rFzgc+AJBHJF5FfAjOAeCqbk9aKyCzfvp1FZL7vVzsAn4jIOuBL4J+qWuf5KWJjYzlw4IC7D5QhpqocOHCA2NhYp0MxTjpyxJKyqZWIuWd2aWkp+fn5349PiFSxsbEkJiYSExPjdCg/ZsXG4KuuIG2vtTmJa4vZ4RQTE0PPnj2dDsME4qVioxt6BNWEG2MynhMxicJ4gJcOal5vuvFSUjaOs7meTOQ5uZAbiQVdt/QAqu69iLT3w+UsUZjIU93Zv9euChqCQK+5vR+uYYnCmLqw2U1NBLFEYRqGcI8LcEvTjTFhYInCNAy1KS5Xd/ZvVwXhF+g1t/fDNazXk4k8dvbvHvZeeIJdURhzMjdPb1Hf2KyXkakDSxSmYQhmcdnNYyTqG5v1MjJ1YE1PpmGwJgxjQsauKIwJNTc3ZdVGQ/k7TK1ZojDmZMEeIxHMpqz6xlafXkZubpIzIWVNT8bbQjE5n5ubsRry32Zcy64ojLc15LNca+oxLmGJwpjaqO3B29/2mjYXuS0J2rQlEcsShTG1UduDt7/tXm3+8fq0JXaFVmdhSRQi8rKI7BWRr6usayMii0Rkk+9762p+92bfPptE5OZwxGs8xM5yTU257QrNQ8J1RfEqMOakdQ8BS1S1L7DEt/wDItIG+B1wFjAM+F11CcVEKK+f5QZiSdC4RFgShaouBw6etPoy4DXfz68Bl/v51dHAIlU9qKrfAYv4ccIxJnxqe/Cuz8G+ISdB4ylO1ig6qOpuAN/39n726QLkVVnO960zxhm1PXi7/WAfSe32doVWZ24vZoufdep3R5GJIrJKRFbt27cvxGEZ4yL1OdhHUru925O2izmZKPaISCcA3/e9fvbJB7pWWU4Edvl7MFWdraqpqpqakJAQ9GCNca1IOtgbRziZKNKBE72YbgY+8LPPQiBNRFr7ithpvnXGbSKpCcML6vNehPP9q8nnxj5bP3K8pDyszxeu7rFzgc+AJBHJF5FfAlOAUSKyCRjlW0ZEUkXkRQBVPQj8AVjp+3rMt864jZ3Vuldd7vYXrvevJp8b+2x979vDRTw0bz0jn1gW1mQRlrmeVHV8NZtG+tl3FfBfVZZfBl4OUWjGeF98fN0Pnifa6cVfOdAF7OoBgMOFpTz/8WZe+ddWKlS54ezulFZU0JSosDy/TQpojNedXJStyUH/5MkU3coLMYZQUWk5r326jeeWbeZIUSmXp3ThnlH96NomLqxxWKIwwXHyWa11PXROTd6LUx2Aw/X+1eVzEwGfrbLyCt5bs5OnFuew+3ARFyUl8MDo/pzW2ZkrLEsUJjj8dTUMxRTg4eSG+OsSQ11jVL89z0OrLrF66TNUS6pK5jd7eHxhNrl7j5LctRVPXpPCOb3bOhqXJQoTOl4vQrohfjfE4KQIulL9cutBpmZksXr7d/Rq14xZNwxh9OkdERfUjyxRGBOJvHIAbsBXDydkf1vAtIwslmTtpX18E/58xSCuSU0kOso946EtURgTiSLgAOx2+d8V8tSiTbz373yaN4nm/tFJ3HpeT5o2Dk9PptqwRGFCxytnrdVxQ/w1icENtRRTY98dK2HmR7m8/tl2ELjtgl7ccWFvWjdr7HRo1bJEYULH6wcrN8RfkxgivY7hEYUlZbz8yVZe+HgLx0rKuGpIIneN6keXVk2dDu2ULFEYY0wIlZZX8PbKPJ5Zsol9BcVcMqADD4xJol8H71xhW6IwxpgQUFXmf/Ut0zOz2br/GKndW/P8L4aQ2qNN0J8rPTudzM2ZpPVOY1zSuKA/viUKY7wuSLWUUB9sIsmnm/czdUEW6/IP069Dc168KZWRA9qHpKtrenY64+eNp7C0kFfWvsLcq+YG/f2zRGGM1wWhlhKOg00k2LDrMFMzslmes4/OLWN5/OrBXDkkkahGoRsLkbk5k8LSQgAKSwvJ3JwZ9PfOPR11jTGO8XewMTW340Ahd771b37yl09Yn3+IR8YOYOl9F/Hz1K4hTRIAab3TiIupnPspLiaOtN5pQX8Ou6IwJhQ81mU1rXcar6x9hcLSwpAdbBqi/UeLmbE0lze/2E5UI2HSiN5MHN6blk1jwhbDuKRxzL1qbkibDUWdmN8lxFJTU3XVqlVOh2Eimb+2aJf/r1mNouaOFpfx4ootzFm+haKyCq5J7cpdl/SlQ4tYp0OrMxFZraqp/rbZFYUxBqg8M7UEEVhJWQV/+2I7Mz7KZf/REsYO6si9aUn0TmjudGghZYnCGBMR6nPFVFGh/N/6XTyRmcOOg4Wc06stL97cn5SurUIUrbs4lihEJAl4u8qqXsBvVfXpKvtcROW9tLf6Vr2nqo+FLUhj6soN03+Y79W1V5eqsnxTZVfXb3YfYUCnFrx26zCG923nilldw8WxRKGq2UAKgIhEATuB9/3sukJVfxrO2IypNxcXrsPGRQX9unQhXZt3iKkLsvhsywG6tmnKM9el8LPBnWkU4l5MbuSWpqeRwGZV3e50IMaYIHHRHFS16dW1Zd9RpmdmM/+rb2nbrDGP/uw0rj+rO42jI3c0gVsSxXXA3Gq2nSMi64BdwH2quiF8YRljGoKadCHdc6SIpxdv4p1VeTSJbsSdI/ty2/BeNG/ilsOkcxzvHisijalMAqer6p6TtrUAKlT1qIiMBZ5R1b7VPM5EYCJAt27dzty+3S5OjHGUR7oIHz5eygsfb+blf22lrFy5/qxu/PfFfUmIb+J0aGHl9u6xlwJrTk4SAKp6pMrP80XkORFpp6r7/ew7G5gNleMoQhmwcZCL2r3NKbi8oF9UWs4bn21n5rJcDhWWMi65M/em9aN722ZOh+Y6bkgU46mm2UlEOgJ7VFVFZBiVU44cCGdwxmVc1O7tRWEdVOfSBF5eoby3Jp+nFuWw63ARF/Rtx4Nj+jOwS0unQ3MtRxOFiMQBo4BfVVl3O4CqzgKuBu4QkTLgOHCdOt1WZoxHRfrEf6rK4o17eXxhFjl7jjI4sSWP/zyZ8/q0czo013M0UahqIdD2pHWzqvw8A5gR7rgaGpuaoeGpy3saillGvfLZWrXtIFMWZLFq+3f0aBvHzOuHMHZQx4gaC1Efbmh6MiHU4M4iXd7uHQ51fU+DPfGfFz5bm/YUMDUjm8Ub95AQ34Q/Xj6Qa4d2JSYqcru61oUligYuHHPVh5VL273Dqa7vabBnGXXzZ2vXoeM8vTiHv6/Op1njaO5L68et5/ckrrEd8urCXrUGzqaPbnjq854Gc+I/N362DhWW8Nyyzbz66TZQuOW8nkwa0Yc2zRo7HZqnOT6OIhRsmvEf8ko7squ4vBuuW95Tt8RxvKScVz7dyvPLNnO0uIwrz0jk7lF9SWwd51hM/rjl9fIn0DgKSxTG+OORwWKRrqy8gndX5/P04hz2HClmZP/23D8mif4dWzgd2o9UrenExcS5rqbj9gF3xhhTK6rKwg3fMm1hNlv2HWNIt1Y8O34Iw3q2cTq0arm5pnMqliiMMZ7y+ZYDTFmQxdq8Q/Rp35zZN57JqNM6uL6rqxtrOjVlicIYf1zSDdfNbdo1Fay/4ZtdR5i2MItl2fvo2CKWaVcN5sohXYj2SFfXcNzbOlSsRmHcxeVF5HBye5t2TQTjb8g7WMiTi3L4x9qdtIiN4dcX9ebmc3sQGxMVoqgjk9UojHfYXE7fq0ubttuuQOrTLn/gaDHPLs3lzS+200iEXw3vzR0X9qZlXEwoQzZ+eOOazZgIlNY7jbiYyu6dNWnTPnH2PnPlTMbPG096dno4wgyotn8DwLHiMv6yZBMXPr6M1z/bxlVDEvn4/hE8dGl/SxIOsSsKY+ohlGfwtW3TdluvmhOvzV1n38XhosOn/BtKyip4a+UO/rIkl/1HixlzekfuG51En/bNwxi18ccShXEXlxSRayIccx3VZiS1m3rV1KY2UVGhfPjVbp7IzGb7gUKG9WzD7JvOZEi31mGO2lTHEoVxFw8Vrt12Bu+mXjU1fW1WbNrHlAVZbNh1hP4d43llwlAuSkpwfVfXSGOJwpg6ctMZ/AnBnMupPk712qzPP8TUjCz+lXuALq2a8uQ1yVyW0oWoRsFPEG4r8HtRwO6xvntWJ6jq5pPWD1bV9aEOrq6se6wJFzsIVc/fa7N1/zGmZ2bzz/W7aR0Xw+SL+3LD2d1oEh2arq4NoYtxuNSpe6yIXAM8DewVkRhggqqu9G1+FRgS7ECN8Rq3nMG7UdXXZm9BEX9Zsom3vswjJqoR/31xH24b3osWsaHtxeS25kGvCtT09DBwpqru9t2v+g0ReVhV3wOCdn0oItuAAqAcKDs5o0llY+UzwFigkMqEtSZYz2+MCZ2ColJmL9/Ciyu2UlpewXXDuvKbkX1pHx8blud3Y/OgFwVKFNGquhtAVb8UkRHAhyKSCAR7OPcIVd1fzbZLgb6+r7OA533fjTEuVVxWzl8/38HMj3I5eKyEnw7uxH1pSfRo1ywoj1/TJr/6FPitWfE/qq1RiMinwI1V6xMiEg/8AzhfVZsEJYDKK4rU6hKFiLwALFPVub7lbOCiE0nMH6tRGOOM8grlg7U7eSIzh52HjnNen7Y8NGYAgxJb+t2/LgfjcNQdIrG2EahGEWhk9oOc1MSkqgXAGOBPwQsPBTJFZLWITPSzvQuQV2U537fOGOMSqspHWXv5yV9WcM8762jdLIY3fjmMN//r7IBJoi4jyf3VHYItHM/hJYESxWvAVSLyffOUiHQAXgF+FsQYzlPVIVQ2MU0SkeEnbfdXD/nRZZCITBSRVSKyat++fUEMz5j6Sc9OZ/L8ya6YUiMU1uz4jutmf84tr67keGk5z44/g/RJ53NB34SAv1fXg3FdpgWprXA8h5cEanpqDfwvcB5wJzAIuAeYBjyvqhVBD0bkUeCoqk6vss6anoxn24sbchNG7t6jPL4wi4Ub9tCueRPuHNmHa4d2o3F0zaaQq89rE47Pg1c/c3VVr1uhisidwFPALuBsVc0PYmDNgEaqWuD7eRHwmKpmVNnnJ8BkKns9nQX8RVWHBXpcSxQNi5cPtpPnT2bmypnfL08aOokZY2c4GFH9fXu4iKcX5/DOqjziGkczcXgvfnl+T5o1qf343Ug7GLtZXcdRtAKmUnlwHkPlgXqBiNypqkuDFFsH4H3fcP1o4G+qmiEitwOo6ixgvu+5c6nsHntLkJ7beISX+8I3pO6ZhwtLef7jzbzyr61UqHLzuT2YPKIPbZvXvV+LjUPxhkCnAGuA54BJqlpGZcE5BXhORLar6vj6PrmqbgGS/ayfVeVnBSbV97mMd4XrYBuKs1s3zb9UV0Wl5bz26TaeW7aZI0WlXJHShbtH9aNrmzinQzNhEqhGkVhdM5OI3Kaqc0IaWT1Y01PDE+omCi83b4VKWXkF763ZyVOLc9h9uIgRSQk8MKY/Azq1cDo0EwJ1anoKVItwc5IwDVOomyi83LwVbKpK5jd7eHxhNrl7j5LStRVPXZvC2b3aOh2acYjNHmsMlc1bL655keLyYppENfF0LaE+vtx6kCkLNrJmxyF6JTRj1g1nMvr0Djbtd4SzRGGMj/qG52gQZ6jxSq+erG+PMC0jm6VZe2kf34T/vXIQPz8zkegou1uysURhDFDZ9FRSXgJASXlJUJqewnEHvPrK/66QJxfl8P6/d9K8STQPjEnilnN70rRxaKb9Nt5kicIYKpue5qyZQ0l5CY2jGgel6cnNdY+Dx0qY+VEub3y2HQRuu6AXv76oN63iGjsdmnEhSxTG+IhvthgJ0iz6bhxDUVhSxsufbOWFj7dwrKSMq4YkcveofnRu1dTp0IyLWaIwhsqz/+LyYgCKy4uDcvbvpjEUpeUVvL0yj2eWbGJfQTGjTuvA/aOT6Nch3rGYjHdYojCG0J39Oz3y+IOsdF77Yj15O1PYd0RI7d6a538xhNQebRyLyXiPJQpjcNfZf7BM/yidpxZtJabiDMoa7eCOkV14+JJzrKurqTVLFMb4BOvs3+kusV/vPMzUjCxWbIpCpAX7Y57kWNQydpfegYj3E6AJP0sUxgSRk11idxwoZHpmNunrdtEqLobLh1YwJ+tuCssOu6aY7nZOJ3m3skRhTBA50SV2X0ExM5Zu4m9f7iCqkTBpRG9+dWFvWsTGcHH266498LntoOyFcS9OsURhTBCFs0vs0eIyZi/fwosrtlBcVsG1Q7ty58i+dGgR+/0+ThfTq+PGg7Kbx704zRKFMUEUjqJ4cVk5f/tiBzOW5nLgWAk/GdSJe9P60SuhedCfK1TceFB247gXt7BEYUyQ1fUs/lRNMRUVSvq6XTyxKJu8g8c5p1dbHrq0P8ldWwUj7LBy40G5IfZ8C5ZT3grVi+x+FMZrAt0PQ1X5OGcfUzOy2bj7CKd1asGDl/ZneN92nu7q6rYaRaSr0/0oQk1EugKvAx2BCmC2qj5z0j4XAR8AW32r3lPVx8IZp7F/6HCorinm2U/SeXXFIQ4cbku3NnE8c10KPxvcmUaNnE8Q9f1cuLV+Yn7MyTmEy4B7VXUAcDYwSURO87PfClVN8X1ZkgizE2e6M1fOZPy88aRnpzsdUoOU1juNuJjKW4vGxcSR3C6Ny57/kCc+jGLv4SgKYl/mrp8WcFlKl7AmifTsdCbPn/yj990+F5HFsUShqrtVdY3v5wJgI9DFqXiMf/7OdE3wnWgf/+Xge7is41tM+Uc0X+eXcyj6TXbG3sZBeY+l28L72gdKBva5iCyuuCuJiPQAzgC+8LP5HBFZJyILROT0sAZmfnSm64aiY0N0+HgpWVv78cmaS1i5OYobzurG738ulMZ9gMpxR177QMnAPheRxfFeTyLSHJgH3KWqR07avAborqpHRWQs8A+gbzWPMxGYCNCtW7cQRhxZrCdIaBWVlvPGZ9uZuSyXQ4WljEvuzL1p/ejethkwkBZNnXvtA/VMss9FZHG015OIxAAfAgtV9cka7L8NSFXV/YH2s15Pxu3KK5T31uTz1KIcdh0uYni/BB4YncTALi2dDu0HnOjIYJ0nnBGo15NjiUIq+/W9BhxU1buq2acjsEdVVUSGAX+n8gojYNCWKIxbqSpLNu5l2sIscvYcZXBiSx4a059z+7RzOjRXCNRN2ISWK7vHAucBNwJficha37qHgW4AqjoLuBq4Q0TKgOPAdadKEsa41ertB5myIIuV276jZ7tmzLx+CGMHdXR0LITbzt7dOGLbOJgoVPUTCHzPSVWdAcwIT0TGhMamPQVMzchm8cY9JMQ34Y+XD+TaoV2JiXK2L4kb51ty44ht44JitjEN1a5Dx3l6cQ5/X51Ps8bR3D86iVvO60FcY3f827nx7N2K5O7kjk+sMSHgVLPKocISnlu2mVc/3QYKt57Xk0kj+tC6WeOwxVATbj17txHb7mNzPZkGyYmi6PGScl75dCvPL9vM0eIyrjwjkbtH9SWxdVxIn7c+gp1M3VbzMDXn1mK2MSETzmaVsvIK3lmVzzNLcthzpJiR/dtz/5gk+ndsEZLnC6Zgnr27seZhgsMVI7ONCbZwjBxWVTK+3k3a08t5+P2v6NKqKe/86hxemjDUE0ki2Gxaj4bLrihMgxTqoujnWw4wZUEWa/MO0bd9c2bfeCajTuvg6Wm/68utNQ9Tf1ajMKYGTrS9n946jS+yOrIsex+dWsZy96h+XDUkkSgXTPvtBlaj8C6rURhTD+nZ6fzi3d/Q5PjVNCsXmjXey8NjB3DTOT2IjYlyOjxXsR5LDZMlCmMCOHC0mCcX5tHm6NMo5RyJnseY1FZMHP5Tp0MzJmwsURjjx7HiMl5csZU5K7ZQWNKdopglHIh6gyaNj/OTpLlOhwdYM48JH0sUxlRRUlbBWyt38Jclm9h/tIQxp3fkvtFJfPNdBZmbS11zULauqCacLFEYA1RUKB9+tZvpC7PZcbCQYT3bMPum/gzp1hqAPu3d1fbuxuk3TMNlicJENFVlxab9TM3IYsOuI/TvGM8rE4ZyUVKCq7u6WldUE06WKEzEWp9/iKkZWfwr9wBdWjXlyWuSuSyliye6unp98jyrr3iLjaMwnlPfg8zW/ceYnpnNP9fvpnVcDJMv7ssNZ3ejSXT4u7pG4gHTbk7kTjaOwjQY9Xp0XQUAAA9GSURBVCni7i0o4tklucz9cgcxUY34zcV9uG14L+JjY0IctX+RWpC2+or32FxPxlPqMp9QQVEpT2Rmc+G0Zcz9cgfjh3Xj4wcu4p60JMeSBETu3EjhmIfLBJejiUJExohItojkishDfrY3EZG3fdu/EJEe4Y8ycqVnpzN5/mTSs9OdDuV7tTnIFJeV89InW7nw8WU8uzSXkQPas/ieC/nD5QNpHx8brpCrFakHzBP1lUlDJ0XMVZTXOVajEJEoIAcYBeQDK4HxqvpNlX1+DQxW1dtF5DrgClW99lSPbTWK+nNzO/Kp2vXLK5R//HsnTy7KYeeh45zfpx0PjunPoMSWDkQbWF1qFJFY1zCh59YaxTAgV1W3AIjIW8BlwDdV9rkMeNT389+BGSIi2hAr8C4T6nbk+hzsqptPSFX5KHsv0zKyyfq2gIFdWjDlqkFc0DchWGEHXW3nRorUuoZxlpNNT12AvCrL+b51fvdR1TLgMNA2LNFFuFA2i5w42M1cOZPx88YHpWlrzY7vuHb259z66iqOl5bz7PgzSJ90vquTRF1Eal3DOMvJKwp/ndVPvlKoyT6VO4pMBCYCdOvWrX6RmZD20w/m1Uru3gKmZWST+c0e2jVvwh8uO53rhnUjJqph9tOwgXbGCU4minyga5XlRGBXNfvki0g00BI46O/BVHU2MBsqaxRBjzYChWrK6GAc7L49XMTTi3N4Z1UecY2juXdUP249vyfNmjTsHt9eH2hnvMnJYnY0lcXskcBOKovZ16vqhir7TAIGVSlmX6mq15zqsa2Y7X51rVEcLizluY9zefVf21CFG87uzqQRvWnbvEkIozWm4XNlMVtVy0RkMrAQiAJeVtUNIvIYsEpV04GXgDdEJJfKK4nrnIrXBEfVBDFj7Iwa/15RaTmvfrqN5z7KpaC4jCtSunD3qH50bRMXwmiNMWBTeJgwqkuX27LyCv6+Op+nF2/i2yNFjEhK4IEx/RnQqUWYojYmMrjyisJEntoUsVWVhRv28PjCLDbvO0ZK11Y8fV0KZ/eyTm82jsKEmyUKEzY1LWJ/ufUg/7tgI//ecYheCc2YdcOZjD69g6un/Q4XG0dhnGCJwoTNqXrsZH17hGkZ2SzN2kuHFk2YcuUgrj4zkegG2tW1LmxCPeMESxQmrPx1uc07WMhTi3J4f+1OmjeJ5sEx/Zlwbg+aNg7/tN9uZ+MojBMsURjHHDxWwoylufz18+0gMPGCXtxxUW9axTV2OjTXsnEUxgmWKEzYFZaU8fInW3nh4y0cKynj6jMTueuSfnRu1dTp0DwhVAMhjamOJQoTNqXlFby9Mo9nlmxiX0Exo07rwAOjk+jbId7p0IwxAViiMCGnqvzzq908kZnD1v3HGNqjNbNuGMKZ3ds4HZoxpgYsUZiQ+jR3P1Mysliff5ikDvG8PCGVEUntXdvV1cYoGPNjlihOYgeK4Ph652GmZmSxYtN+urRqyvSfJ3PFGV2IauTOBAE2RsGY6liiqMIOFPW3/cAxnsjMIX3dLlrFxfD/fjKAG87uTmyM+7u6hnKMgp2AGC+zRFGFDWaqu30FxcxYuok3v9hBdJQweUQfJl7YixaxMU6HVmMtY1sSJVGUa3lQxyjYCYjxOksUVdhgptorKCplzoqtvLhiC8VlFVw7tCt3jexL+xaxTodWK+nZ6Tz9+dOUaznRjaK56+y7gnYwtxMQ43WWKKqwwUw1V1xWzt++2MGzS3M5eKyEnwzqxL1p/eiV0Nzp0Oqk6sG8rKKMw0WHg/bYdgJivM4SxUlsMFNgFRVK+rpdTM/MJv+745zbuy0PjulPctdWTodWL6E8mNsJiPE6ux+FqRFV5eOcfUzNyGbj7iOc1qkFD17an+F927m2q2ttBSo4WzHaNHSB7kdhicKc0tq8Q0xZsJHPtxykW5s47k3rx88Gd6aRi7u6BlNdbrhkjNe47sZFIvI48DOgBNgM3KKqh/zstw0oAMqBsur+CBMam/cdZfrCbBZ8/S3tmjfm9+NOZ/ywbjSOjqxpv60YbSKdU//xi4CBqjoYyAH+J8C+I1Q1xZJE+Ow5UsT/vPcVaU8tZ3nOPu66pC/L7h/Bzef2cDxJpGenM3n+ZNKz08P2nGm904iLqbw3txWjTSRy5IpCVTOrLH4OXO1EHOaHDh8vZdbHm3nlX1spr1BuPLs7ky/uQ7vmTZwODXBuPIIVo02kc0Ovp1uBt6vZpkCmiCjwgqrODl9YkaOotJzXP9vGzI82c/h4KZeldObeUUl0axvndGg/4GQTkPWGM5EsZIlCRBYDHf1sekRVP/Dt8whQBrxZzcOcp6q7RKQ9sEhEslR1eTXPNxGYCNCtW7d6xx8JyiuUeWvyeXpRDrsOFzG8XwIPjE5iYJeWTofml41HMMYZjvV6EpGbgduBkapaWIP9HwWOqur0U+1rvZ4CU1UWb9zL4wuzyNlzlOTEljw4pj/n9mnndGinZN1UjQkNN/Z6GgM8CFxYXZIQkWZAI1Ut8P2cBjwWxjAbpFXbDjJlQRartn9Hr3bNeO4XQ7h0YEfPjIWwJiBjws+pGsUMoAmVzUkAn6vq7SLSGXhRVccCHYD3fdujgb+paoZD8Xpezp4CpmVks3jjHhLim/CnKwZyTWpXYqIiq6urMab2nOr11Kea9buAsb6ftwDJ4YyrIdp16DhPLcph3pp8mjWO5v7RSdxyXg/iGruhH4MxxgvsaNFAHSos4bllm3n1022g8Mvze/Lri/rQulljp0MLK6tpGFN/ligamOMl5bzy6VaeX7aZo8VlXHlGIvek9aNLq6ZOhxZ2dh8IY4LDEkUDUVZewTur8nlmSQ57jhRzyYD23D+6P0kd450OzTE29YYxwWGJwuNUlYyvv+Xxhdls2X+MM7u3Zsb1Qxjao43ToTnOxl0YExyWKDzs0837mZqRzbq8Q/Rt35w5N6VyyYD2nunqGmo29YYxwWGJwoM27DrMtIxsPs7ZR6eWsUy7ejBXDUkkKkKm/a4NG3dhTP1ZovCQvIOFPJGZzT/W7qJl0xgeHtufm87pQWxMlNOhGWMaMEsUHrD/aDEzluby5hfbiWok3HFRb26/sDctm8Y4HZoxJgJYonCxo8VlvLhiC3OWb6GorIJrUhO5c2Q/OraMdTo0Y0wEsUThQiVlFcz9cgfPLt3E/qMlXDqwI/eNTqJ3QnOnQzPGRCBLFC5SUaH83/pdPJGZw46DhZzVsw2zb+rPkG6tnQ7NGBPBLFG4gKqyYtN+pmZksWHXEfp3jOeVCUO5KCnBuroaYxxnicJhJWUV3PrqSj7J3U+XVk156tpkLkvuQiPr6mqMcQlLFA5rHN2IHu3iuLj/afzi7G40ibaursYYd7FE4QJ/vHyQ0yEYY0y17K41xhhjArJEYYwxJiBHEoWIPCoiO0Vkre9rbDX7jRGRbBHJFZGHwh2nMcYYZ2sUT6nq9Oo2ikgUMBMYBeQDK0UkXVW/CVeAxhhj3N30NAzIVdUtqloCvAVc5nBMxhgTcZxMFJNFZL2IvCwi/oYedwHyqizn+9YZY4wJo5AlChFZLCJf+/m6DHge6A2kALuBJ/w9hJ91GuD5JorIKhFZtW/fvqD8DcYYY0JYo1DVS2qyn4jMAT70sykf6FplORHYFeD5ZgOzAVJTU6tNKMYYY2rHkWK2iHRS1d2+xSuAr/3sthLoKyI9gZ3AdcD1NXn81atX7xeR7UEJNnzaAfudDqKWvBgzeDNuL8YM3ozbizFD/ePuXt0Gp3o9TRORFCqbkrYBvwIQkc7Ai6o6VlXLRGQysBCIAl5W1Q01eXBVTQhN2KEjIqtUNdXpOGrDizGDN+P2Yszgzbi9GDOENm5HEoWq3ljN+l3A2CrL84H54YrLGGPMj7m5e6wxxhgXsEThHrOdDqAOvBgzeDNuL8YM3ozbizFDCOMWVesgZIwxpnp2RWGMMSYgSxTGGGMCskThIiLyB9+0JmtFJNPXXdjVRORxEcnyxf2+iLRyOqaaEJGfi8gGEakQEVd3hfTiLMq+qXn2ioi/MVKuJCJdReQjEdno+2zc6XRMpyIisSLypYis88X8+5A8j9Uo3ENEWqjqEd/PvwFOU9XbHQ4rIBFJA5b6xr1MBVDVBx0O65REZABQAbwA3KeqqxwOyS/fLMo5VJlFGRjv9lmURWQ4cBR4XVUHOh1PTYhIJ6CTqq4RkXhgNXC5m19rERGgmaoeFZEY4BPgTlX9PJjPY1cULnIiSfg0I8DcVm6hqpmqWuZb/JzKqVZcT1U3qmq203HUgCdnUVbV5cBBp+OoDVXdraprfD8XABtx+USkWumobzHG9xX044YlCpcRkT+JSB7wC+C3TsdTS7cCC5wOooGxWZQdICI9gDOAL5yN5NREJEpE1gJ7gUWqGvSYLVGE2Slm1UVVH1HVrsCbwGRno610qph9+zwClFEZtyvUJG4PqNUsyqb+RKQ5MA+466SrfFdS1XJVTaHyan6YiAS9qc/JO9xFpJrOqgv8Dfgn8LsQhlMjp4pZRG4GfgqMVBcVvWrxWrtZrWZRNvXja+efB7ypqu85HU9tqOohEVkGjMH/RKt1ZlcULiIifassjgOynIqlpkRkDPAgME5VC52OpwH6fhZlEWlM5SzK6Q7H1CD5CsMvARtV9Umn46kJEUk40dNQRJoClxCC44b1enIREZkHJFHZG2c7cLuq7nQ2qsBEJBdoAhzwrfrc7T21AETkCuBZIAE4BKxV1dHORuWfiIwFnuY/syj/yeGQTklE5gIXUTn19R7gd6r6kqNBnYKInA+sAL6i8n8Q4GHf5KSuJCKDgdeo/Gw0At5R1ceC/jyWKIwxxgRiTU/GGGMCskRhjDEmIEsUxhhjArJEYYwxJiBLFMYYYwKyRGFMCPhmIt0qIm18y619y91FJENEDonIh07HaUxNWKIwJgRUNQ94HpjiWzUFmK2q24HHgRudis2Y2rJEYUzoPAWcLSJ3AecDTwCo6hKgwMnAjKkNm+vJmBBR1VIRuR/IANJ804Qb4zl2RWFMaF0K7AY8cfMeY/yxRGFMiIhICpV3pjsbuNt3BzVjPMcShTEh4JuJ9Hkq72mwg8oC9nRnozKmbixRGBMatwE7VHWRb/k5oL+IXCgiK4B3gZEiki8irpy11pgTbPZYY4wxAdkVhTHGmIAsURhjjAnIEoUxxpiALFEYY4wJyBKFMcaYgCxRGGOMCcgShTHGmID+P+XJ1HHb390LAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "w = stocGradAscent(dataArr,labelMat)\n",
    "plotBestFit(w)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 249,
   "metadata": {},
   "outputs": [],
   "source": [
    "def stocGradAscent1(dataArr,labelMat,maxCycle=150):\n",
    "    dataArr = array(dataArr)\n",
    "    m,n = shape(dataArr)\n",
    "    weights = ones(n)\n",
    "    sample = zeros((maxCycle,n))\n",
    "    for i in range(maxCycle):\n",
    "        dataIndex = [i for i in range(m)]\n",
    "        for j in range(m):\n",
    "            alpha = 4/(1+i+j)+0.01\n",
    "            #randIndex = int(random.uniform(0,len(dataIndex)))\n",
    "            #del(dataIndex[randIndex])\n",
    "            randIndex = int(random.uniform(0,m-j))\n",
    "            #(0,len(dataIndex))产生一个服从均匀分布的随机数\n",
    "            h = sigmoid(sum(dataArr[randIndex]*weights))\n",
    "            error = labelMat[randIndex]-h\n",
    "            weights = weights+alpha*error*dataArr[randIndex]\n",
    "        sample[i,:] = weights\n",
    "    return weights,sample.T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 251,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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WAE7d0KDBq5ZaNs2d+y774LnVa0a9OoF553nBKRHDycC27fDKadARoYr1E86yaVr3tyJR26uq3EkJ7vtSNCo0dHbNWpEJt8oYkISjAg7lefMmcOwYcNo0KABACeeeOJRx5cuXcrvf/979uzZw/79+xk4cCAAZ511FjfeeCNXXnkll112GQBnnHEGTz75JBkZGVx22WW0b98e1WM7tFkvNSNh2b3bOY+3bIGVK12BfuCAeyufP98JxldfudoAFL6xJyU5EWjf3gnI+vVOUKpVgz/8wRXKvXq5gr+gqadBA+jWzTX/lJZkK0LBhCRmqGqJBfuNN97IBx98QPfu3XnttdeYO3cu4Gof3377LR999BE9evQgPT2da665hj59+vDRRx8xcOBAXn75ZVJSUtiwoXDYTUZGBs2aNYv2bRlG2Th0CKZMcc07qs6f8NVXbrl6tROS4lSt6moWXbu69QcfdOsnn+yWSUkunRXuMceeeIzo378/Q4cO5d5776V+/frs2nX0fF6ZmZk0bdqUw4cP88Ybb9C8uRt7uWbNGvr06UOfPn348MMP2bBhA3v37qVNmzbcddddrF27lu+//55Ro0axatUq1q1bR/PmzZk8eTJvvvlm2YyNcLOeUcHJzHQ+gw8/hNdfdzULEVdjKErr1s55PXy4azpq187VFjp0cH6FAmd1WWoORlQxIQlGhJ3KnTt35pFHHuGcc84hKSmJU0899ahJip544gn69OnDSSedRNeuXcn0X/s3v/kNq1atQlXp378/3bt356mnnuI///kPlStXpkmTJjz66KMkJyczduxYBg4cSF5eHiNGjKBz585lM9bGihjhMm8eTJ/uej7NmuUEQAQGDHBisXcvXH218wdUqeJ6GrVsefx8TUTiEgnUtp7oBJrYasWKFXTs2NEji+KL4z6LQE1w5fB3UlZsYqti7NkDr70GLVpAejr873/w+eeuiallS7jkEujb1/kmWrQ4bnaGN4hIlqqeUJZzrUZiFFK8SSuSeVnzWPliwwb47DPn+H73XecUB9f81LYtPPss3Hpr4UA8o1xjQmIUEkxEytKsZ81j5ZPcXHjmGXjsMef4rlEDfvlL+M1v3LFevZwD3ahQmJAYJWNNWga4MRv33gtvvuleCi67DB5/HDp2LOwtZVRYTEgMwwjMjh2ui+7PP8Mbb7jmrBtucCIyZIjX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\n",
      "text/plain": [
       "<Figure size 432x288 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "w = stocGradAscent1(dataArr,labelMat,30)[0]\n",
    "plotBestFit(w,150,stocGradAscent1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 247,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "ax = fig.add_subplot(111)\n",
    "y = stocGradAscent1(dataArr,labelMat)[1]\n",
    "x = array(range(150))\n",
    "ax.plot(x,y[0,:],color='r')\n",
    "ax.plot(x,y[1,:],color='g')\n",
    "ax.plot(x,y[2,:],color='b')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
